package com.prefboss.job.config;//package com.prefboss.job.config;
//
//import com.baomidou.mybatisplus.core.parser.ISqlParserFilter;
//import com.baomidou.mybatisplus.core.parser.SqlParserHelper;
//import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
//import com.baomidou.mybatisplus.extension.plugins.tenant.TenantHandler;
//import com.baomidou.mybatisplus.extension.plugins.tenant.TenantSqlParser;
//import com.google.common.collect.Lists;
//import com.prefboss.interceptor.TenantContext;
//import net.sf.jsqlparser.expression.Expression;
//import net.sf.jsqlparser.expression.StringValue;
//import org.apache.ibatis.mapping.MappedStatement;
//import org.apache.ibatis.reflection.MetaObject;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//
//import java.util.List;
//
//@Configuration
//public class MybatisPlusTenantConfig {
//    //根据app_id tenant_id租户
//    private static final String SYSTEM_TENANT_ID = "app_id";
//    private static final String SYSTEM_TENANT_ID2 = "tenant_id";
//    //排除多租户支持表
//    private static final List<String> IGNORE_TENANT_TABLES = Lists.newArrayList("");
//
//    @Bean
//    public PaginationInterceptor paginationInterceptor() {
//        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
//        // SQL解析处理拦截：增加租户处理回调。
//        TenantSqlParser tenantSqlParser_app = new TenantSqlParser()
//                .setTenantHandler(new TenantHandler() {
//                    @Override
//                    public Expression getTenantId(boolean where) {
//                        // 从当前系统上下文中取出当前请求的服务商ID，通过解析器注入到SQL中。
//                        String appId = TenantContext.getAppId();
//                        if (null == appId) {
//                            throw new RuntimeException("#appId is null.");
//                        }
//                        return new StringValue(appId);
//                    }
//
//                    @Override
//                    public String getTenantIdColumn() {
//                        return SYSTEM_TENANT_ID;
//                    }
//
//                    @Override
//                    public boolean doTableFilter(String tableName) {
//                        // 忽略掉一些表：如租户表（provider）本身不需要执行这样的处理。
//                        return IGNORE_TENANT_TABLES.stream().anyMatch((e) -> e.equalsIgnoreCase(tableName));
//                    }
//                });
//
//        /**
//         * SQL解析处理拦截：增加租户处理回调。
//         */
//        TenantSqlParser tenantSqlParser_store = new TenantSqlParser()
//                .setTenantHandler(new TenantHandler() {
//                    @Override
//                    public Expression getTenantId(boolean where) {
//                        // 从当前系统上下文中取出当前请求的服务商ID，通过解析器注入到SQL中。
//                        String tenantId = TenantContext.getTenantId();
//                        if (null == tenantId) {
//                            throw new RuntimeException("#tenantId is null.");
//                        }
//                        return new StringValue(tenantId);
//                    }
//
//                    @Override
//                    public String getTenantIdColumn() {
//                        return SYSTEM_TENANT_ID2;
//                    }
//
//                    @Override
//                    public boolean doTableFilter(String tableName) {
//                        // 忽略掉一些表：如租户表（provider）本身不需要执行这样的处理。
//                        return IGNORE_TENANT_TABLES.stream().anyMatch((e) -> e.equalsIgnoreCase(tableName));
//                    }
//                });
//        paginationInterceptor.setSqlParserList(Lists.newArrayList(tenantSqlParser_app, tenantSqlParser_store));
//        //特殊mapper过滤
//        paginationInterceptor.setSqlParserFilter(new ISqlParserFilter() {
//            @Override
//            public boolean doFilter(MetaObject metaObject) {
//                MappedStatement ms = SqlParserHelper.getMappedStatement(metaObject);
//                // 登录结果特殊处理
////                if ("com.restkeeper.store.mapper.StaffMapper.selectOne".equals(ms.getId())) {
////                    return true;
////                }
//                return false;
//            }
//        });
//        return paginationInterceptor;
//    }
//}
